﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
using System.Drawing.Imaging;
using System.Windows.Forms;

namespace ScreenShot
{
    public partial class Form1 : Form
    {
        [System.Runtime.InteropServices.DllImportAttribute("gdi32.dll")]
        private static extern bool BitBlt(
                        IntPtr hdcDest,   //   目标   DC的句柄   
                        int nXDest,
                        int nYDest,
                        int nWidth,
                        int nHeight,
                        IntPtr hdcSrc,     //   源DC的句柄   
                        int nXSrc,
                        int nYSrc,
                        System.Int32 dwRop     //   光栅的处理数值   
            ); 

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Rectangle rect = new Rectangle();
            rect = Screen.GetWorkingArea(this);
            //创建一个以当前屏幕为模板的图象   
            Graphics g1 = this.CreateGraphics();
            //创建以屏幕大小为标准的位图     
            Image MyImage = new Bitmap(rect.Width, rect.Height, g1);
            Graphics g2 = Graphics.FromImage(MyImage);
            //得到屏幕的DC   
            IntPtr dc1 = g1.GetHdc();
            //得到Bitmap的DC     
            IntPtr dc2 = g2.GetHdc();
            //调用此API函数，实现屏幕捕获   
            BitBlt(dc2, 0, 0, rect.Width, rect.Height, dc1, 0, 0, 13369376);
            //释放掉屏幕的DC   
            g1.ReleaseHdc(dc1);
            //释放掉Bitmap的DC     
            g2.ReleaseHdc(dc2);
            //以JPG文件格式来保存   
            MyImage.Save(@"d:/Capture.jpg", ImageFormat.Jpeg);
            MessageBox.Show("当前屏幕已经保存为C盘的capture.jpg文件！");   
        }

        /// <summary>
        /// 屏幕截图
        /// </summary>
        /// <returns></returns>
        public static Bitmap getScreen() 
        { 
            Bitmap baseImage = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height);
            Graphics g = Graphics.FromImage(baseImage); 
            g.CopyFromScreen(new Point(0, 0), new Point(0, 0), Screen.AllScreens[0].Bounds.Size); 
            g.Dispose(); 
            return baseImage; 
        }


        /// 图片存储
        /// </summary>
        /// <param name="b"></param>
        /// <param name="filepath"></param>
        public void img2file(Bitmap b, string filepath)
        {
            b.Save(filepath);
        }

        private void button2_Click(object sender, EventArgs e)
        {
            Bitmap bb = getScreen();
            img2file(bb, "test1.jpg");
        }
    }
}
